Úloha železniční přejezd
Přes prázdniny mají učitelé nárok na zasloužený odpočinek, pokud ovšem někdo leží v přípravách, tak se mu může hodit úloha železniční přejezd z kroužku programování za použití robotů Meet Edison. Roboty jsem představoval v příspěvku Hodina kódu s LightBot a Meet Edison, kde jsem si pochvaloval dostatek didaktických materiálů, ale dnes už mi přijde, že tam chybí zajímavé a složitější úlohy. Ty je nejspíš potřeba si vymyslet. S touto úlohou přišel Martin Javorek na svém twitterovém účtu @programohrajeme. Jeho varianta je složitější, využívá Python. Já jsem si ji zjednodušil pro menší děti, abych si vystačil jen s vizuálním „kostkovým“ jazykem.
Jak funguje železniční přejezd
Po tragédii na železničním přejezdu ve Studénce jsem narazil na tento článek, který vysvětluje, jak fungují železniční přejezdy. Dozvíte se tam třeba, proč je v § 29 odst. 1 písm. c) zákona č. 361/2000 Sb. o provozu na pozemních komunikacích ustanoveno:
Řidič nesmí vjíždět na železniční přejezd, sklápějí-li se, jsou-li sklopeny nebo zdvihají-li se závory.
Pro naši potřebu si úlohu ovšem značně zjednodušíme.
Zadání
Naprogramujte chráněný železniční přejezd. Závory se sklopí, když se vlak dostane do přibližovacího úseku. Zdvihnou se, jakmile vjede do anulačního obvodu. Anulační obvod se spouští projetím lokomotivy, musí proto být dostatečně daleko od závor (na kontrolu projetí posledního vagonu byste potřebovali Python, jedná se o složitější úlohu). Po dobu zdvíhání a sklápění budou závory vydávat akustický a světelný výstražný signál. Uvažujte pouze jednosměrný provoz. Programujte v prostředí EdBlock
Pěkná vlaková úloha s roboty, kterou postavily a naprogramovaly naše děti za nedělní dopoledne. Bylo to samozřejmě těžší než to na první pohled vypadalo, ale úspěch :-) pic.twitter.com/tIeoQNt89d
— Programujeme hrou (@programohrajeme) February 26, 2018
Pro koho je úloha určená
Úlohu zvládnou děti od sedmi let. Předpokládám, že už umí základy práce s robotem Meet Edison a dokáží postavit jednoduché věci z lega. Jsou potřeba základní znalosti programování, zejména koncept opakuj a posílání zpráv (to lze probrat v rámci této úlohy). Úlohu lze za výrazné pomoci lektora zvládnout za 60 minut. Pokud by to měli řešit jako problém, tedy na řešení přijít co nejvíc sami, bylo by potřeba času mnohem víc.
Potřeby
- robot Meet Edison, 3 kusy
- vláčkodráha
- mašinka (nemusí být nutně s pohonem) s vagony
- libovolné lego technic na sestavení závory a podložení robotů do správné výšky
Řešení
Uvádím řešení v prostředí EdBlock. Pro každou komponentu (přibližovací úsek, závory a anulační obvod) budete potřebovat samostatného robota. Doporučuji rozlišit si přibližovací úsek a anulační bod barevnou kostičkou, abyste pak pracně nehledali záměnu.
Přibližovací úsek
Přibližovací úsek po projetí vlaku pošle zprávu přes infračervené rozhraní. Spouštěčem zprávy bude detekce překážky. Potřebujeme, aby se pro vlakovou soupravu poslala pouze jediná zpráva, takže po odeslání vložíme adekvátní pauzu. Pro potřeby ladění si můžeme rozsvítit LEDky. Navrhuji rozsvítit, pokud je přibližovací úsek připravený poslat zprávu. Po odeslání, když čeká, zhasne. Vše se opakuje v nekonečné smyčce.
Závory
Závory čekají na zprávu z přibližovacího úseku nebo anulačního obvodu. Nekontrolují, zda jim nějaká zpráva přišla víckrát. Během zdvihání i sklápění blikají a pípají. Je potřeba odladit velikost kroku a počet opakování.
Anulační obvod
Anulační obvod funguje úplně stejně jako přibližovací úsek. Spouštěčem je opět detekce překážky, tedy lokomotiva, nepočítáme poslední vagon soupravy. Jediný, ale podstatný, rozdíl je v tom, že pošle jinou zprávu, aby je závory dokázaly rozlišit.
Problémy
Při realizaci jsem narazil na dva drobné technické problémy. Za prvé jsem musel řešení zjednodušit více, než jsem chtěl, jelikož mi výrazové prostředky vizuálního jazyka nedovolily blikat a pípat i se spuštěnými závorami (respektive, aby pak byly schopné reagovat na zprávu o zvednutí). Pokud se vám někomu podaří vylepšit, budu rád za zpětnou vazbu. Za druhé jsme museli řešit to, že sklápění závory nemůže být na stejný počet kroků, jelikož dlouhá a těžká závora motor převažuje a asi o kousek přeskočí (stačí ubrat kroky).
Kromě technického problému jsem řešil i ten didaktický. Na kroužku jsem měl zhruba osm dětí a jen tři roboty, tudíž jsem potřeboval, aby pracovali v kolektivu, nikoliv samostatně. Což nemusí být naškodu, ostatně Mitchel Resnick v knize Lifelong Kindergarten prosazuje princip 4P (Projects, Passion, Peers, and Play; tedy projekty, vášeň, parťáci a hra). Nicméně kromě technické části pak potřebujete sledovat dynamiku skupiny a kromě implementačních rad případně korigovat i chování jednotlivců, které nevede ke zdárnému konci.